package com.bean.config;

import com.bean.service.OrderService;
import com.bean.utils.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class OrderJob {

    @Autowired
    private OrderService orderService;

    /**
     * 使用定时任务关闭超期未支付订单，会存在弊端:
     * 1. 会有时间差，程序不严谨
     * 2. 不支持集群: 单机没毛病，使用集群后就会存在多个定时任务同时执行，而我们只需要一个节点去执行该任务
     * 3. 对数据库全表搜索，及其影响数据库性能
     *
     * 定时任务：只适用于小型轻量级项目，传统项目
     *
     *  消息队列可以解决这个问题：RabbitMQ   RocketMQ    Kafka
     *  延时任务 （队列）
     *  10:12分下单，11:12分检查订单状态，如果当前还是未付款，则直接关闭订单即可，，，优点：不用向定时任务那样每隔一段时间去检查多次后去关闭，，，，只需检查一次就行了，而且时间差小
     */

//    @Scheduled(cron = "0/3 * * * * ?")
    @Scheduled(cron = "0/3 0 0/1 * * ?") // 每一小时执行一次
    public void autoCloseOrder() {
        orderService.closeOrder();
        System.out.println("执行定时任务，当前时间为: " + DateUtil.getCurrentDateString(DateUtil.DATETIME_PATTERN));
    }


}
